Improved the migration experience

Dominik Sander 10 years ago
parent
commit
dad2875da9

+ 24 - 0
app/controllers/home_controller.rb

@@ -1,9 +1,33 @@
1 1
 class HomeController < ApplicationController
2 2
   skip_before_filter :authenticate_user!
3 3
 
4
+  before_filter :upgrade_warning, only: :index
5
+
4 6
   def index
5 7
   end
6 8
 
7 9
   def about
8 10
   end
11
+
12
+  private
13
+  def upgrade_warning
14
+    return unless current_user
15
+    twitter_oauth_check
16
+    basecamp_auth_check
17
+  end
18
+
19
+  def twitter_oauth_check
20
+    if ENV['TWITTER_OAUTH_KEY'].blank? || ENV['TWITTER_OAUTH_SECRET'].blank?
21
+      if @twitter_agent = current_user.agents.where("type like 'Agents::Twitter%'").first
22
+        @twitter_oauth_key    = @twitter_agent.options['consumer_key'].presence || @twitter_agent.credential('twitter_consumer_key')
23
+        @twitter_oauth_secret = @twitter_agent.options['consumer_secret'].presence || @twitter_agent.credential('twitter_consumer_secret')
24
+      end
25
+    end
26
+  end
27
+
28
+  def basecamp_auth_check
29
+    if ENV['THIRTY_SEVEN_SIGNALS_OAUTH_KEY'].blank? || ENV['THIRTY_SEVEN_SIGNALS_OAUTH_SECRET'].blank?
30
+      @basecamp_agent = current_user.agents.where(type: 'Agents::BasecampAgent').first
31
+    end
32
+  end
9 33
 end

+ 24 - 0
app/views/home/_upgrade_warning.html.erb

@@ -0,0 +1,24 @@
1
+<% if @twitter_agent || @basecamp_agent %>
2
+  <div class="alert alert-danger" role="alert">
3
+    <p>
4
+      <b>Warning!</b> You need to update your Huginn configuration, so your agents continue to work with the new OAuth services.
5
+    </p>
6
+    <br/>
7
+    <% if @twitter_agent %>
8
+      <p>
9
+        To complete the migration of your <b>Twitter</b> agents you need to update your .env file and add the following two lines:
10
+
11
+        <pre>
12
+TWITTER_OAUTH_KEY=<%= @twitter_oauth_key %>
13
+TWITTER_OAUTH_SECRET=<%= @twitter_oauth_secret %>
14
+        </pre>
15
+      </p>
16
+    <% end %>
17
+    <% if @basecamp_agent %>
18
+      <p>
19
+        Your <b>Basecamp</b> agents could not be migrated automatically. You need to manually register an application with 37signals and authenticate Huginn to use it.<br/>
20
+        Have a look at the <%= link_to 'Wiki', 'https://github.com/cantino/huginn/wiki/Configuring-OAuth-applications', target: '_blank' %> if you need help.
21
+      </p>
22
+    <% end %>
23
+  </div>
24
+<% end -%>

+ 1 - 0
app/views/home/index.html.erb

@@ -1,4 +1,5 @@
1 1
 <% if user_signed_in? %>
2
+  <%= render "upgrade_warning" %>
2 3
   <%= render "signed_in_index" %>
3 4
 <% else %>
4 5
   <%= render "signed_out_index" %>

+ 4 - 0
db/migrate/20140525150140_migrate_agents_to_service_authentication.rb

@@ -26,6 +26,7 @@ class MigrateAgentsToServiceAuthentication < ActiveRecord::Migration
26 26
       agent.service_id = service.id
27 27
       agent.save!(validate: false)
28 28
     end
29
+    migrated = false
29 30
     if agents.length > 0
30 31
       puts <<-EOF.strip_heredoc
31 32
 
@@ -36,6 +37,7 @@ class MigrateAgentsToServiceAuthentication < ActiveRecord::Migration
36 37
 
37 38
 
38 39
       EOF
40
+      migrated = true
39 41
     end
40 42
     if Agent.where(type: ['Agents::BasecampAgent']).count > 0
41 43
       puts <<-EOF.strip_heredoc
@@ -45,7 +47,9 @@ class MigrateAgentsToServiceAuthentication < ActiveRecord::Migration
45 47
 
46 48
 
47 49
       EOF
50
+      migrated = true
48 51
     end
52
+    sleep 20 if migrated
49 53
   end
50 54
 
51 55
   def down